home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / networking / ip / ka9q / MNetsrc.hqx / Mac TCP_IP Source v.33 / Other Files.SIT / sys5unix.c < prev    next >
Text File  |  1989-01-13  |  4KB  |  269 lines

  1. /*
  2.     FILE: unix.c
  3.     
  4.     Routines: This file contains the following routines:
  5.         eihalt()
  6.         kbread()
  7.         clksec()
  8.         tmpfile()
  9.         restore()
  10.         stxrdy()
  11.         disable()
  12.         memstat()
  13.         filedir()
  14.         
  15.     Written by Mikel Matthews, N9DVG
  16.     SYS5 stuff added by Jere Sandidge, K4FUM
  17. */
  18.  
  19. #include <stdio.h>
  20. #include <signal.h>
  21. #include <termio.h>
  22. #include "global.h"
  23. #include "cmdparse.h"
  24. #include "iface.h"
  25. #include <sys/types.h>
  26. #include <sys/dir.h>
  27. #include <time.h>
  28. #include "smtp.h"
  29. #include "unix.h"
  30.  
  31. unsigned nasy;
  32. int asy_attach();
  33. extern struct cmds attab[];
  34. extern struct termio savecon;
  35.  
  36. eihalt()
  37. {
  38. }
  39. kbread()
  40. {
  41.     unsigned char c;
  42.  
  43.     if (read(fileno(stdin), &c, 1) <= 0)
  44.         return (-1);
  45.     return ((int) c);
  46. }
  47. clksec()
  48. {
  49.     long tim;
  50.  
  51.     (void)time(&tim);
  52.     return ((int) tim);
  53. }
  54. restore()
  55. {}
  56.  
  57. stxrdy()
  58. {return(1);}
  59.  
  60. disable()
  61. {}
  62.  
  63. memstat()
  64. {
  65.     return(0);
  66. }
  67.  
  68. /* wildcard filename lookup */
  69. filedir (name, times, ret_str)
  70. char *name;
  71. int times;
  72. char *ret_str;
  73. {
  74.     static FILE     *dirp = NULL;
  75.     struct direct dent;
  76.     struct direct *dp = &dent;
  77.     char fn[DIRSIZ+1], ext[DIRSIZ+1];
  78.     char *ptr;
  79.     char *cp;
  80.     char tmp1[DIRSIZ+1];
  81.     char tmp2[DIRSIZ+1];
  82.     char *index(), *rindex();
  83.     extern char mailqdir[];
  84.     /*
  85.      * Make sure that the NULL is there incase we don't find anything
  86.      */
  87.     ret_str[0] = NULL;
  88.     if(name == NULLCHAR || name[0] == '\0')
  89.         name = "*.*";
  90.     if (cp = rindex(name, '/')) {
  91.         cp++;
  92.         if (ptr = index(cp, '.'))
  93.             *ptr++ = NULL;
  94.         strncpy(fn, cp, DIRSIZ-1);
  95.         fn[DIRSIZ-1] = NULL;
  96.         strncpy(ext, ptr, DIRSIZ-1);
  97.         ext[DIRSIZ] = NULL;
  98.     }
  99.     else
  100.         return;
  101.     if (dirp == NULL) {
  102.         if ( (dirp = fopen(mailqdir, "r")) == NULL ) {
  103.             printf("Could not open mail queue (%s)\n",mailqdir);
  104.             return;
  105.         }
  106.     }
  107.     
  108.     if (times == 0) {
  109.         rewind(dirp);
  110.         /* skip over dot and dot dot */
  111.  
  112.         if (fread((char *)dp, sizeof(dent), 1, dirp) != 1) {
  113.             printf("Could not read mail queue (%s)\n", mailqdir);
  114.             fclose(dirp);
  115.             dirp = NULL;
  116.             return;
  117.         }
  118.         if (fread((char *)dp, sizeof(dent), 1, dirp) != 1) {
  119.             printf("Could not read mail queue (%s)\n", mailqdir);
  120.             fclose(dirp);
  121.             dirp = NULL;
  122.             return;
  123.         }
  124.     }
  125.     while (fread((char *)dp, sizeof(dent), 1, dirp) == 1) {
  126.         strncpy(tmp1, dp->d_name, DIRSIZ); /* need NULL term */
  127.         tmp1[DIRSIZ] = NULL;
  128.         if ((ptr = index(tmp1, '.')) == NULL)
  129.             continue;
  130.         strcpy(tmp2, tmp1);
  131.         *ptr++ = NULL;
  132.         if ((strcmp(tmp1, fn) != 0) && (fn[0] != '*'))
  133.             continue;
  134.         if ((strcmp(ptr, ext) != 0) && (ext[0] != '*'))
  135.             continue;
  136.  
  137.         strcpy(ret_str, tmp2);
  138.         break;
  139.     }
  140.  
  141. }
  142.  
  143. /* checks the time then ticks and updates ISS */
  144. static int clkval = 0;
  145. void
  146. check_time()
  147. {
  148.     int32 iss();
  149.  
  150.     if(clkval != clksec()){
  151.         clkval = clksec();
  152.         tick();
  153.         (void)iss();
  154.     }
  155. }
  156.  
  157. getds()
  158. {
  159.     return (0);
  160. }
  161.  
  162. audit(){}
  163.  
  164. doshell(argc, argv)
  165. char **argv;
  166. {
  167.     register int pid, pid1, i, (*savi)();
  168.     int rc;
  169.     char str[128];
  170.     struct termio stty;
  171.  
  172.     ioctl(0, TCGETA, &stty);
  173.     ioctl(0, TCSETA, &savecon);
  174.  
  175.     str[0] = '\0';
  176.     for (i = 1; i < argc; i++) {
  177.         strcat(str, argv[i]);
  178.         strcat(str, " ");
  179.     }
  180.  
  181.     if ((pid = fork()) == 0) {
  182.         if (argc > 1)
  183.             (void)execl("/bin/sh", "sh", "-c", str, 0);
  184.         else
  185.             (void)execl("/bin/sh", "/bin/sh", (char *)0,(char *)0,0);
  186.     }
  187.     savi = signal(SIGINT, SIG_IGN);
  188.     while ((pid1 = wait(&rc)) != pid && pid1 != -1)
  189.         ;    
  190.     signal(SIGINT, savi);
  191.     ioctl(0, TCSETA, &stty);
  192.     return (rc);
  193. }
  194.  
  195.  
  196. dodir(argc, argv)
  197. char **argv;
  198. {
  199.     register int pid, pid1, i, (*savi)();
  200.     int rc;
  201.     char str[128];
  202.  
  203.     strcpy(str, "ls -l ");
  204.     for (i = 1; i < argc; i++) {
  205.         strcat(str, argv[i]);
  206.         strcat(str, " ");
  207.     }
  208.  
  209.     if ((pid = fork()) == 0)
  210.         system(str);
  211.  
  212.     savi = signal(SIGINT, SIG_IGN);
  213.     while ((pid1 = wait(&rc)) != pid && pid1 != -1)
  214.         ;    
  215.     signal(SIGINT, savi);
  216.     return (rc);
  217. }
  218.  
  219. rename(s1, s2)
  220. register char *s1, *s2;
  221. {
  222.     char tmp[256];
  223.  
  224.     (void)sprintf(tmp, "mv %s %s", s1, s2);
  225.     (void)system(tmp);
  226. }
  227.  
  228. docd(argc, argv)
  229. char **argv;
  230. {
  231.     char tmp[128];
  232.     char *getcwd();
  233.  
  234.     if (argc > 1)
  235.         if (chdir(argv[1]))
  236.             return (-1);
  237.     if (getcwd(tmp, 128) == NULL)
  238.         return (-1);
  239.     puts(tmp);
  240.     return (0);
  241. }
  242.  
  243. ether_dump()
  244. {
  245. }
  246.  
  247. mkdir(s, m)
  248. register char    *s;
  249. register int    m;
  250. {
  251.     char tmp[128];
  252.  
  253.     sprintf(tmp, "mkdir %d %s", m, s);
  254.     if (system(tmp))
  255.         return (-1);
  256.     return (0);
  257. }
  258. rmdir(s)
  259. register char    *s;
  260. {
  261.     char tmp[128];
  262.  
  263.     sprintf(tmp, "rmdir %s", s);
  264.     if (system(tmp))
  265.         return (-1);
  266.     return (0);
  267. }
  268.  
  269.